package com.example.chapter04;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.example.chapter04.util.DateUtil;






/**
 * 活动响应示例 - 作为「请求-响应」模式中的响应方Activity
 * 核心功能：
 * 1. 接收上一页面（ActRequestActivity）传递的请求数据并展示
 * 2. 定义固定的响应消息，点击按钮后将响应数据回传给上一页面
 * 3. 通过setResult()设置返回结果，配合finish()关闭当前页面
 */
public class ActResponseActivity extends AppCompatActivity implements View.OnClickListener {

    // 固定的响应消息内容：作为当前页面要返回给上一页面的回复文本
    private static final String mReponse = "我还没睡，我爸妈不在家。";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 加载当前页面的布局文件（activity_act_response.xml）
        setContentView(R.layout.activity_act_response);

        // 1. 初始化「请求内容显示控件」：用于展示从ActRequestActivity接收的请求数据
        TextView tv_request = findViewById(R.id.tv_request);
        // 获取启动当前Activity的Intent对象：上一页面通过Intent传递数据
        Intent fromRequestIntent = getIntent();
        // 从Intent中取出「数据包Bundle」：上一页面用putExtras()放入的所有数据都在这里
        Bundle requestBundle = fromRequestIntent.getExtras();

        // 从Bundle中提取具体的请求数据（key需与上一页面存入时完全一致）
        // request_time：上一页面发送请求的时间（由DateUtil工具类生成）
        String request_time = requestBundle.getString("request_time");
        // request_content：上一页面发送的请求消息内容
        String request_content = requestBundle.getString("request_content");

        // 格式化请求数据为可读文本（用String.format()拼接换行和变量）
        String requestDesc = String.format("收到请求消息：\n请求时间为%s\n请求内容为%s",
                request_time, request_content);
        // 将格式化后的请求内容显示在TextView上
        tv_request.setText(requestDesc);

        // 2. 为「响应按钮」绑定点击监听器：点击后执行回传数据逻辑
        // 当前Activity实现了View.OnClickListener接口，所以监听器为this
        findViewById(R.id.btn_response).setOnClickListener(this);

        // 3. 初始化「响应内容预览控件」：提前展示要返回给上一页面的响应消息
        TextView tv_response = findViewById(R.id.tv_response);
        tv_response.setText("待返回的消息为：" + mReponse);

        // 适配EdgeToEdge模式：设置页面内边距，避免内容被状态栏/导航栏遮挡
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            // 获取系统栏（状态栏+导航栏）的边距信息
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            // 给根布局设置内边距，让内容避开系统栏
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
    }

    /**
     * 点击事件回调方法：处理「响应按钮」的点击逻辑
     * 核心任务：封装响应数据，回传给上一页面，然后关闭当前页面
     */
    @Override
    public void onClick(View v) {
        // 1. 创建Intent对象：此处Intent不用于跳转，仅用于「携带响应数据」回传
        Intent responseIntent = new Intent();

        // 2. 创建Bundle数据包：用于存储多个响应数据（键值对形式）
        Bundle responseBundle = new Bundle();
        // 存入「响应时间」：用DateUtil工具类获取当前时间（与上一页面时间格式一致）
        responseBundle.putString("response_time", DateUtil.getNowTime());
        // 存入「响应内容」：使用预定义的mReponse字符串
        responseBundle.putString("response_content", mReponse);

        // 3. 将Bundle数据包放入Intent中：通过Intent传递给上一页面
        responseIntent.putExtras(responseBundle);

        // 4. 设置返回结果：告诉上一页面「当前页面处理成功」并传递数据
        // 参数1：结果码（RESULT_OK表示处理成功，可自定义其他码如RESULT_CANCELED）
        // 参数2：携带响应数据的Intent
        setResult(Activity.RESULT_OK, responseIntent);

        // 5. 关闭当前Activity：返回上一页面（ActRequestActivity）
        // 关闭后，上一页面的ActivityResultLauncher会触发回调，接收这里传递的结果
        finish();
    }
}